#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
#define N 10
//void run_child()
//{
//    int cnt=5;
//    while(cnt)
//    {
//        printf("I am a child process pid=%d ppid=%d\n",getpid(),getppid());
//        cnt--;
//        sleep(1);
//    }
//}
//int main()
//{
//   for(int i=0;i<N;i++)
//   {
//       pid_t id=fork();
//       if(id==0)
//       {
//       run_child();
//       exit(0);//子进程直接退出
//       }
//       printf("create child process success!,pid=%d,i=%d\n",id,i);//只有父进程才会运行，子进程已经退出了
//   }
//   //回收子进程
//   sleep(10);
//   for(int i=0;i<N;i++)
//   {
//       pid_t ret=wait(NULL);
//       if(ret>0)
//       {
//           printf("process %d recovery success!\n",ret);
//       }
//   }
//   sleep(5);
//    return 0;
//}
int main()
{
    pid_t id=fork();
    if(id<0)
    {
        perror("fork");//打印退出码
        return 1;
    }
    else if(id==0)
    {
        //child
        int cnt=5;
        while(cnt)
      {
          printf("我是一个子进程:pid=%d ppid=%d cnt=%d\n",getpid(),getppid(),cnt);
          cnt--;
          sleep(1);
      }
        exit(1);//子进程执行完直接退出
    }
    else
    {
        //parent
        int cnt=10;
        while(cnt)
        {
        printf("我是一个父进程:pid=%d ppid=%d cnt=%d\n",getpid(),getppid(),cnt);
        cnt--;
        sleep(1);
        }
        int status=0;
        pid_t ret=waitpid(-1,&status,0);
        if(ret==id)
        {
          printf("等待成功 pid=%d exit sig=%d exit code=%d\n",ret,status&0x7f,status>>8&0xff);
        }
        sleep(5);
    }
    return 0;
}

